Category: Creative Programming

GHDL不完全入門手冊

這學期的數電實驗與即將到來的數設均會大量使用VHDL。而Quatus作爲一款官方綁定的軟件並未提供有效的仿真手段。因此可能大家都是寫好後燒錄至CPLD上進行調試,調試週期長,而且很困難。

GHDL是一款開源自由的VHDL仿真軟件,通過編譯VHDL語言的源文件來生成一個文本文件,再對其進行解釋,達到仿真的目的。

使用Linux的同學可能會在軟件庫中找到ghdl,而Mac與Windows的同學可以點這裏來獲取。

仿真的準備活動

首先你需要一個vhdl的源代碼……其中包含着你想要實現的硬件。在這裏我們用一個4選1選擇器來作爲樣例。

[codebox 1]

我們需要對其進行測試與仿真。

硬件的一個entity就好像軟件中的一個函數/類,它還需要很多參數才能有確定的行爲。因此我們需要像給自己寫的函數庫寫測試一樣,給這個硬件寫一個用來測試它的構件(有沒有想到實驗室裏用來測試門芯片的那個箱子?)。

[codebox 2]

在寫測試的時候記得儘量將情況考慮周全,最好還能比較容易地判斷正確性。

開始仿真!

現在請確認

[codebox 3]

然後……ghdl要怎麼用呢?其實ghdl自帶生成一個簡單的Makefile的小工具。比如執行如下代碼:

[codebox 4]

就可以獲取一個簡單的Makefile了。Makefile也比較簡單,稍微看一下就能明白。緊接着,運行make以及make run就可以看到我們的仿真輸出了。

幾個Trick

首先,GHDLFLAGS必須要加上—ieee=synopsys選項才能使用library ieee裏面的內容。如果不想看到很多function “.*” is never referenced,可以加上—warn-no-unused。

其次,如果想限制仿真的運行時間,可以將Makefile中的GHDLRUNFLAGS變量加上—stop-time=time(如—stop-time=50ns)。

另外,如果你的系統有X server,你還可以輸出波形來進行檢查。查看波形需要使用gtkwave軟件,Linux與Mac的同學都可以在庫中方便地找到。想要生成波形,需要在GHDLRUNFLAGS中加上—vcd=filename。

吶吶,自從用上ghdl,從來沒燒過兩次CPLD。如果有問題請在下面提問。

四個項目

這學期本着醬油到底的思想加入了四個開發項目。目前兩個已經初步完結,兩個剛剛起步。

想着已經很久沒更新,之前也決心弄完其中一個項目之後要寫一篇Blog來記錄一下,以提升自己的博文數量……

Special Gift for DA16 Girls!

创意来自Matrix67

调试许久之后发现是自己的文章页面的宽度不够,详情请点击这里

做为伪Geek还是这样的方式更符合我的想法=W=

html标记语言基础知识

做为网络时代的伪Geek,还是需要知道一些网页知识的。

其实每个网页都是一个纯文本文件,浏览器的作用就是将这个文本文件转换成我们所见到的网页。

我们可以开启任何你喜欢的文本编辑器,写上几行html代码,然后保存后缀为htm或html,之后用浏览器来打开它,就可以看到自己所写的页面了。

再次提到,如果你右击网页的空白区,一般可以看到“查看源代码”或者”View Page Source”之类的选项,选中之就可以查看当前页面在木有浏览器的作用时的样子。如果你打开的网页不是过于牛X,一般都是html语言或者其派生语言(XML、XHTML等)所写。

html语言使用“标签”来定义网页元素,格式是<tagname>。比如作用域最大的<html>标签,就是管理整个源码,在这个标签的作用域之外的东西浏览器是不会显示出来的。(但是在源代码中可以看到)

网页开发脱盲

一直很想真正的写个有应用价值的程序。同时为了更大的兼容性,在考虑过OpenGL之后,还是选择了Web这个基本上支持IE之外所有浏览器的开发形式。//MS真是计算机界统一规范的大敌,从NTFS到DirectX。

于是从头开始学起。N年之前学过一点点使用GUI的Dreamweaver来设计网页。但是,现在作为一个已经爱上vim的人来说,自己手写html似乎更符合一个饥渴人士的习惯。

但是,从头学起还是需要一点教程的。由是,在google上搜了一下HTML,于是找到了这个网站//在这里你可以看到相应的中文网站,但是,内容有些不全,且部分已经落后。

普及向——链表初步(C向)

开始便想到了洲哥奇葩的期中考试中的“给定常量M”……

链表出现的主要意义第一是满足元素个数没有明确上限的时候,使用动态内存分配来满足程序的需求。其次是因为数组对插入、删除、移动操作的时间复杂度较高,因此采用链表来实现。







数组与链表的复杂度比较
数组 链表
遍历 O(n) O(n)
查找 O(log n)(二分) O(n)
插入、删除、移动 O(n) O(1)

可见,在查找次数比较多的时候使用数组,在插入、删除次数比较多的时候使用链表。